
package com.eva.android.widget;

import android.content.Context;
import android.widget.ArrayAdapter;
import android.widget.Spinner;

import com.eva.epc.common.dto.IdName;

/**
 * </p>
 * 一个支持DataRender数据项封装的ArrayAdapter子类实现.<br><br>
 *
 * DataRender主要用于复杂显示数据——后台模型数据(id)与前台view数据(name)分开，关键业务值取的是
 * id而显示时是用的仅用于显示的name值，这样便于把显示数据与后台数据分开.
 * </p>
 *
 * @author Jack Jiang(http://www.52im.net/space-uid-1.html)
 * @version 1.0
 * @see DataRender
 */
public class RenderedSpinnerAdapter extends ArrayAdapter
{
	/** 本adapter所对应的Spinner对象引用 */
	private Spinner spinner;
	/** IdName 封装对象 */
	private DataRender render;

	/**
	 * 实例化一个Spinner对象专用的Adapter对象.
	 *
	 * @param context
	 * @param textViewResourceId
	 * @param render 用于Spinner条项显示时的数据项集合封装对象
	 * @param spinner
	 * @see ArrayAdapter#ArrayAdapter(Context , int , Object[])
	 */
	public RenderedSpinnerAdapter(Context context, int textViewResourceId,
			DataRender render,Spinner spinner)
	{
		super(context, textViewResourceId, render.getIdAndNames2());
		this.spinner = spinner;
		this.render = render;
	}

	/**
	 * 返回选中项所对应的IdName对象.
	 *
	 * @return
	 * @see #getItem(int)
	 * @see Spinner#getSelectedItemPosition()
	 */
	public IdName getSelectedItem()
	{
		return (IdName)getItem(spinner.getSelectedItemPosition());
	}

	/**
	 * 返回返中项所对应的IdName对象的id值.
	 *
	 * @return
	 * @see #getSelectedItem()
	 * @see IdName#getId()
	 */
	public Object getSelectedKey()
	{
		return getSelectedItem().getId();
	}

	/**
	 * 设置选中项.
	 *
	 * @param key 要选中项对应IdName对象的id值
	 */
	public void setSelectedItem(Object key)
	{
		spinner.setSelection(render.getIds2().indexOf(key));
	}
}
